"""
AdminClass是一个自定义的Django管理类，继承自admin.ModelAdmin。在初始化时，会自动获取并显示模型的所有字段。

Parameters:
model (django.db.models.Model): 一个Django模型实例。
admin_site (django.contrib.admin.AdminSite): Django的管理站点实例。

Attributes:
list_display (list): 列表页自动显示所有的字段。

UniversalManagerApp是一个自定义的应用配置类，继承自AppConfig。当所有应用的Admin都加载完之后，会执行ready方法，自动注册所有模型到admin站点。

Attributes:
name (str): 应用配置的名称，必须和当前应用的名称一致。

Methods:
ready(): 在所有应用的Admin都加载完之后执行，自动注册所有模型到admin站点。如果模型已经在admin站点注册过，则忽略。
"""

from django.contrib import admin
from django.apps import apps, AppConfig


class AdminClass(admin.ModelAdmin):
    def __init__(self, model, admin_site):
        # 列表页自动显示所有的字段：
        self.list_display = [field.name for field in model._meta.fields]
        super(AdminClass, self).__init__(model, admin_site)

# automatically register all models
class UniversalManagerApp(AppConfig):
    """
    应用配置在 所有应用的 Admin 都加载完之后执行
    """
    # the name of the AppConfig must be the same as current application
    name = 'recruitment'

    def ready(self):
        models = apps.get_app_config('running').get_models() 
        for model in models:
            try:
                admin.site.register(model, AdminClass)
            except admin.sites.AlreadyRegistered:
                pass
